#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>


int main()
{
    pid_t id = fork();
    if(id == 0)
    {
        //子进程
        int cnt = 5;
        while(cnt)
        {
            sleep(1);
            cnt--;
        }
        exit(5);
    }
    //父进程
    int status = 0;
    while(1)
    {
        pid_t rid = waitpid(id,&status,1);
        if(rid == 0)
        {
            //子进程没退出
            printf("father is running\n");
            sleep(1);
        }
        else 
        {
            //子进程退出
            printf("father end!\n");
            break;
        }
    }
    return 0;
}


//int main()
//{
//
//    pid_t id = fork();
//
//    
//    if(id == 0)
//    {
//        //子进程
//        int exit_code = 0;//子进程退出码
//        scanf("%d",&exit_code);
//        printf("I am child , pid:%d , ppid:%d\n",getpid(),getppid());
//        if(exit_code > 50)
//        {
//            exit(exit_code);
//        }
//        else 
//        {
//            int a = 10;
//            a/=0;//故意写的除零错误
//        }
//    }
//    //父进程
//    int status = 0;
//    pid_t rid = waitpid(id,&status,0);
//    return 0;
//}


//int main()
//{
//    pid_t id = fork();
//    if(id == 0)
//    {
//        //子进程
//        int cnt = 5;
//        while(cnt)
//        {
//            printf("I am child , pid:%d , ppid:%d\n",getpid(),getppid());
//            cnt--;
//            sleep(1);
//        }
//        printf("child exit\n");
//        exit(1);
//    }
//    //父进程
//    sleep(10);
//    printf("father is waiting\n");
//    int status = 0;
//    pid_t rid = waitpid(id,&status,0);
//    printf("father wait success!wait_process_id:%d,status:%d\n",rid,status);
//    sleep(3);
//    return 0;
//}
